home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
FROMUTS
/
GOFER
/
src
/
grammar_do
< prev
next >
Wrap
Text File
|
1991-11-20
|
9KB
|
155 lines
--------------------------------------------------------------------------
Input form as parsed:
--------------------------------------------------------------------------
Rhs ::= GUARDED [(Line,(Expr,Expr))] Expr::= LETREC [Binding] Expr
| LETREC [Binding] Rhs | COND Expr Expr Expr
| (Line, Expr) | AP Expr Expr
; | NAME
| VAR
| INT
Eqn ::= SIGDECL Line [Var] Type | STRING
| (Expr, Rhs) | CHAR
; | UNIT
| TUPLE
Qual ::= FROMQUAL (Pat,Expr) | TCHARCELL
| QWHERE (Pat,Expr) | LAMBDA Alt
| BOOLQUAL Expr | FINSTEPSEQ (e1,e2,e3)
; | FINSEQ (e1,e2)
| INFSTEPSEQ (e1,e2)
Alt ::= ([Pat], Rhs) | INFSEQ e1
; | ESIGN e1 Type
| CASE (Expr,[(Pat,Rhs)])
| FINLIST [Expr]
| LISTCOMP Expr [Qual]
;
--------------------------------------------------------------------------
After translation from equations to bindings:
--------------------------------------------------------------------------
Rhs ::= GUARDED [(Line,(Expr,Expr))] Expr::= LETREC [Binding] Expr
| LETREC [Binding] Rhs | COND Expr Expr Expr
| (Line, Expr) | AP Expr Expr
; | NAME
| VAR
| INT
Binding ::= (Var, (Type, [Alt])) | STRING
| ([Var], ([Type], (Pat,Rhs))) | CHAR
; | UNIT
| TUPLE
Qual ::= FROMQUAL (Pat,Expr) | TCHARCELL
| QWHERE (Pat,Expr) | LAMBDA Alt
| BOOLQUAL Expr | FINSTEPSEQ (e1,e2,e3)
; | FINSEQ (e1,e2)
| INFSTEPSEQ (e1,e2)
Alt ::= ([Pat], Rhs) | INFSEQ e1
; | ESIGN e1 Type
| CASE (Expr,[(Pat,Rhs)])
| FINLIST [Expr]
| LISTCOMP Expr [Qual]
;
--------------------------------------------------------------------------
After dependency analysis:
--------------------------------------------------------------------------
Rhs ::= GUARDED [(Line,(Expr,Expr))] Expr::= LETREC [[Binding]] Expr
| LETREC [[Binding]] Rhs | COND Expr Expr Expr
| (Line, Expr) | AP Expr Expr
; | NAME
| VAR
| INT
Binding ::= (Var, (Type, [Alt])) | STRING
| ([Var], ([Type], (Pat,Rhs))) | CHAR
; | UNIT
| TUPLE
Qual ::= FROMQUAL (Pat,Expr) | TCHARCELL
| QWHERE (Pat,Expr) | LAMBDA Alt
| BOOLQUAL Expr | FINSTEPSEQ (e1,e2,e3)
; | FINSEQ (e1,e2)
| INFSTEPSEQ (e1,e2)
Alt ::= ([Pat], Rhs) | INFSEQ e1
; | ESIGN e1 Type
| CASE (Expr,[(Pat,Rhs)])
| FINLIST [Expr]
| LISTCOMP Expr [Qual]
;
--------------------------------------------------------------------------
After type checking:
--------------------------------------------------------------------------
Rhs ::= GUARDED [(Line,(Expr,Expr))] Expr::= LETREC [[Binding]] Expr
| LETREC [[Binding]] Rhs | COND Expr Expr Expr
| (Line, Expr) | AP Expr Expr
; | NAME
| VAR
| INT
Binding ::= (Var, [Alt]) | STRING
| ([Var], (Pat,Rhs)) | CHAR
; | UNIT
| TUPLE
Qual ::= FROMQUAL (Pat,Expr) | TCHARCELL
| QWHERE (Pat,Expr) | LAMBDA Alt
| BOOLQUAL Expr | FINSTEPSEQ (e1,e2,e3)
; | FINSEQ (e1,e2)
| INFSTEPSEQ (e1,e2)
Alt ::= ([Pat], Rhs) | INFSEQ e1
; | ESIGN e1 Type
| CASE (Expr,[(Pat,Rhs)])
| FINLIST [Expr]
| LISTCOMP Expr [Qual]
;
--------------------------------------------------------------------------
After translation to remove list comprehensions, pattern bindings,
sequence expressions, line number references, case and lambda expressions,
type signature expressions:
--------------------------------------------------------------------------
Rhs ::= GUARDED [(Expr,Expr)] Expr ::= LETREC [Binding] Expr
| LETREC [Binding] Rhs | COND Expr Expr Expr
| Expr | AP Expr Expr
; | NAME
| VAR
Binding ::= (Var, [Alt]) | INT
; | STRING
| CHAR
Alt ::= ([Pat], Rhs) | UNIT
; | TUPLE
;
--------------------------------------------------------------------------
After pattern matching compiler: replace Alts by CASE & NUMCASE, separate
function and variable bindings, calculate free variable sets and local
function dependents for later use in lambda lifting:
--------------------------------------------------------------------------
Rhs ::= GUARDED [(Expr, Expr)] Expr ::= LETREC LocalDef Expr
| LETREC LocalDef Rhs | COND Expr Expr Expr
| Expr | AP Expr Expr
| FATBAR Rhs Rhs | NAME
| CASE OFFSET [(Discr,Rhs)] | VAR
| NUMCASE OFFSET [(Discr,Rhs)] | INT
; | STRING
LocalDef ::= ([Rhs], [FunDef]) | CHAR
; | OFFSET
FunDef ::= (Var, Arity, (Fvs, FFs, Rhs)) | UNIT
; | TUPLE
;
Fvs is a list of free variables (i.e. offsets) appearing in Rhs,
FFs is a list of free functions (i.e. FunDefs) appearing in Rhs and
contained in the same group of FunDefs.
--------------------------------------------------------------------------
Scope ::= [(Var,Expr)] Switch ::= ([Pat], Scope, Rhs)
; ;
--------------------------------------------------------------------------
Lifted ::= GUARDED [(LTerm, LTerm)] LTerm ::= LETREC [Lifted] LTerm
| LETREC [Lifted] Lifted | COND LTerm LTerm LTerm
| LTerm | AP LTerm LTerm
| FATBAR Lifted Lifted | NAME
| CASE OFFSET [(Discr,Lifted)] | VAR
; | INT
| STRING
| CHAR
| OFFSET
;
--------------------------------------------------------------------------